#include<stdio.h>
#include<string.h>
#include<math.h>

// 在漆黑的夜里，四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话，大家是无论如何也不敢过桥去的。不幸的是，四个人一共只带了一只手电筒，而桥窄得只够让两个人同时通过。如果各自单独过桥的话，四人所需要的时间分别是1，2，5，8分钟；而如果两人同时过桥，所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是，你如何设计一个方案，让用的时间最少。

// 针对上篇算法题--过桥问题的解析如下

// 解答其实也容易，能者多劳这四个字就足以形容解答方案了——用时短的人必须要多跑几趟以便传递手电筒。
// 设这四个人叫做A，B，C，D，他们所需要的时间分别是1，2，5，8分钟。
// 第一步：A和B过桥，花费2分钟。
// 第二步：A回来，花费1分钟。
// 第三步：C和D过桥，花费8分钟。
// 第四步：B回来，花费2分钟。
// 第五步：A和B过桥，花费2分钟。
// 这样只要花费2+1+8+2+2=15分钟，下面再来考虑如何用程序来解决这类问题，在写程序之前还有个细节要考虑下，比如A，B，C，D四个人所需要的时间分别是1，8，9，10分钟。
// 方案一 （4个人，都在原始对岸）
// 第一步：A和B过桥，花费8分钟。
// 第二步：A回来，花费1分钟。
// 第三步：C和D过桥，花费10分钟。
// 第四步：B回来，花费8分钟。
// 第五步：A和B过桥，花费8分钟。
// 一共要8+1+10+8+8=35分钟。
// 方案二 （4个人，都在原始对岸）
// 第一步：A和B过桥，花费8分钟。
// 第二步：A回来，花费1分钟。
// 第三步：A和C过桥，花费9分钟。
// 第四步：A回来，花费1分钟。
// 第五步：A和D过桥，花费10分钟。
// 一共要8+1+9+1+10=29分钟。(4个人，一次算减两个，直接剩下)
// 因此可以得出更加细化的解决方案——要么是最快者将最慢的2个送过桥，要么是最快的2个将最慢的2个送过桥。即将过桥的人按其过桥的时间从小到大排列，设为A，B，……Y，Z。其中A和B是最快的二个，Y和Z是最慢的二个。那么就有二种方案：
// 方案一 最快者将最慢的2个送过桥 （8个人，都在原始对岸）1,2,3,4,5,6,7,8
// 第一步：A和Z过桥，花费Z分钟。8
// 第二步：A回来，花费A分钟。1
// 第三步：A和Y过桥，花费Y分钟。7
// 第四步：A回来，花费A分钟。 (ZY过桥了），剩下A...和X,共n-2个)1
// 这四步后总人数就减小2个，花费时间为A + A + Y + Z分钟。(A+A+B+Y+Z) 8+1+7+1
// ...
// 第一步：A和X过桥，花费X分钟。 （6个人，都在原始对岸）4
// 第二步：A回来，花费A分钟。1
// 第三步：A和W过桥，花费W分钟。3
// 第四步：A回来，花费A分钟。 (ZY过桥了），剩下A...和X,共n-2个)1
// 这四步后总人数就减小2个，花费时间为A + A + W + X分钟。 6+1+5+1
// 。。。
// 第一步：A和V过桥，花费X分钟。 （4个人，都在原始对岸）4
// 第二步：A回来，花费A分钟。1
// 第三步：A和U过桥，花费W分钟。R
// 第四步：A回来，花费A分钟。 (ZY过桥了），剩下A...和X,共n-2个)1
// 这四步后总人数就减小2个，花费时间为A + A + W + X分钟。 4+1+3+1
// 。。。
// 第五步：A和B过桥，花费B分钟。（才算过完，剩下0个，花费时间B分钟）2
// 总共用时：A + A + A + A + B + W + X + Y + Z （6个人，九次加法）24

// 方案一 最快者将最慢的2个送过桥 （5个人，都在原始对岸）
// 第一步：A和Z过桥，花费Z分钟。
// 第二步：A回来，花费A分钟。
// 第三步：A和Y过桥，花费Y分钟。
// 第四步：A回来，花费A分钟。 (ZY过桥了），剩下A...和X,共n-2个)
// 这四步后总人数就减小2个，花费时间为Z + A + Y + A分钟。
// ...
// 第一步：A和X过桥，花费X分钟。 （3个人，都在原始对岸）
// 第二步：A回来，花费A分钟。
// 第三步：A和B过桥，花费B分钟。
// 这四步后总人数就减小2个，花费时间为A + B + X分钟。
// 总共用时：A+A+A+B+X+Y+Z
// 
// 方案二 最快的2个将最慢的2个送过桥
// 第一步：A和B过桥，花费B分钟。
// 第二步：A回来，花费A分钟。
// 第三步：Y和Z过桥，花费Z分钟。
// 第四步：B回来，花费B分钟。 
// 第五步：A和B过桥，花费B分钟。
// 这四步后总人数同样减小2个，花费时间为A + B + B + Z分钟。 (A+B+B+B+Z)
// 这样，每次比较一下这二种方案就能将总人数减小2。然后我们再考虑一些边界情况：
// 有三个人过桥设为A，B，C（已经排好序，下同）。应该花费A + B + C分钟。
// 有二个人过桥设为A，B。那么肯定是花费B分钟。
// 有一个人过桥设为A。肯定花费A分钟。
// 所以 只需要比较 (B+B)>?(A+Y)
// int m=((2B)>(A+Y))?2B:(A+Y)
// 总时间： A+B+Z+m（B+B或A+Y）(五次加法) A+B+B+B+Z或A+A+B+Y+Z，
int main()
{
    int a;
    while (scanf("%d", &a)!= EOF) {
        int b[a];
        for (int i = 0; i < a; i++)
            scanf("%d", &b[i]);
        for (int i = 0; i < a; i++)
        {
            int mini = i;
            for (int j = i; j < a; j++)
            {
                if (b[mini] > b[j]) mini = j;
            }
            int t = b[i];
            b[i] = b[mini];
            b[mini] = t;
        }
        int totalTime = 0;
        if (a == 1) printf("%d\n", b[0]);
        else if (a == 2) printf("%d\n", b[1]);
        else if (a == 3) printf("%d\n", b[0]+b[1]+b[2]);
        else if (a == 3) printf("%d\n", b[0]+b[1]+b[2]);
        else {
            if (a%2==0)
                for (int i = 1; i <= (ceil(a/2.0) - 1); i++)
                { // ABCDEFGHIJKLMNOPQRSTUVWXYZ
                    // A + Z + BB / AY
                    // A + X + BB / AW
                    // A + V + BB / AU
                    // + B
                    // printf("%d", a);
                    totalTime += b[0] + b[a-1-(2*i-2)] + (((2*b[1])<(b[0]+b[a-2*i])) ? 2*b[1]:(b[0]+b[a-2*i]));
                    if (i == (ceil(a/2.0) - 1)) printf("%d\n", totalTime+b[1]);
                }
            else
                for (int i = 1; i <= (ceil(a/2.0) - 2); i++)
                {
                    // A + Z + BB / AY
                    // A + B + X
                    totalTime += b[0] + b[a-1-(2*i-2)] + (((2*b[1])<(b[0]+b[a-2*i])) ? 2*b[1]:(b[0]+b[a-2*i]));
                    if (i == (ceil(a/2.0) - 2)) printf("%d\n", totalTime + b[0] + b[1] + b[a-1-(2*i)]);
                }
                
            
        }
    }
    

    return 0;
}